//
//  GPUImageContext.h
//  gpuImage
//
//  Created by 王洪飞 on 2024/6/9.
//

#import <Foundation/Foundation.h>
#import "GPUImageFramebuffer.h"
typedef NS_ENUM(NSUInteger, GPUImageRotationMode) {
    kGPUImageNoRotation,
    kGPUImageRotateLeft,
    kGPUImageRotateRight,
    kGPUImageFlipVertical,
    kGPUImageFlipHorizonal,
    kGPUImageRotateRightFlipVertical,
    kGPUImageRotateRightFlipHorizontal,
    kGPUImageRotate180
};

NS_ASSUME_NONNULL_BEGIN

@interface GPUImageContext : NSObject

@end

/**
 * 如果一个类实现了该协议,我们可以知道他能够接受帧缓存对象的输入,如果继承了GPUImageOutput类,我们可以知道他能够输出到真缓存对象,如果两个都具备,表明他既可以输入有可以输出
 */
@protocol GPUImageInput <NSObject>
/**准备下一个要使用的帧**/
-(void)newFrameReadyAtTime:(CMTime)frameTime atIndex:(NSInteger)textureIndex;
/**设置输入的帧缓冲对象以及纹理索引**/
-(void)setInputFramebuffer:(GPUImageFramebuffer *)newInputFramebuffer atIndex:(NSInteger)textureIndex;
/**下一个有效的纹理索引**/
-(NSInteger)nextAvailableTextureIndex;
/**设置目标的尺寸**/
-(void)setInputSize:(CGSize)newSize atIndex:(NSInteger)textureIndex;
/**设置旋转模式**/
-(void)setInputRotation:(GPUImageRotationMode)newInputRotation atIndex:(NSInteger)textureIndex;
/**设置缓冲区最大尺寸**/
-(CGSize)maximumOutputSize;
/**输入处理结束**/
-(void)endProcessing;
/**是否忽略渲染目标的更新**/
-(BOOL)shouldIgnoreUpdatesToThisTarget;
/**是否启用渲染目标**/
-(BOOL)enabled;
/**是否为单色输入**/
-(BOOL)wantsMonochromeInput;
/**设置单色输入**/
-(void)setCurrentlyReceivingMonochromeInput:(BOOL)newValue;

@end

NS_ASSUME_NONNULL_END
